/**
 * @description 房源信息控制层
 * @date 2020-08-13 15:10
 * @auth LI
 */

const {
  createHouseInfo,
  updateHouseInfoById,
  getHouseInfoList,
  deleteHouseInfoById
} = require('../services/houseInfo')

const { ReturnResult } = require('../model/ResultModel')

/**
 * 获取全部房源信息
 * @param {string} houseName 业主名称
 * @param {number} houseOwnerId 业主 id
 * @param {number} supervisionId 监理 id
 * @param {number} foremanId 工长 id
 * @param {number} bricklayerId 瓦工 id
 * @param {number} carpenterId 木工 id
 * @param {number} plumberId 水电工 id
 * @param {number} painterId 油漆工 id
 * @param {number} page 第几页
 * @param {number} limit 多少条
 */
async function getHouseInfos(
{
  houseOwnerId,
  supervisionId,
  foremanId,
  bricklayerId,
  carpenterId,
  plumberId,
  painterId,
  houseName,
  page,
  limit
}) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    const result = await getHouseInfoList({
      houseOwnerId,
      supervisionId,
      foremanId,
      bricklayerId,
      carpenterId,
      plumberId,
      painterId,
      houseName,
      page,
      limit
    })
    return new ReturnResult(result.count, result.rows, true, "查询成功")
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, "查询失败，请重试")
  }
}

/**
 * 添加房源信息
 * @param {string} houseName 业主名称
 * @param {string} houseAddress 房子地址
 * @param {string} roomType 房型
 * @param {string} startTime 开工时间
 * @param {string} drawing 图纸
 * @param {number} houseOwnerId 对应账号表业主 id
 * @param {number} supervisionId 对应账号表监理 id
 * @param {number} foremanId 对应账号表工长 id
 * @param {number} bricklayerId 对应账号表瓦工 id
 * @param {number} carpenterId 对应账号表木工 id
 * @param {number} plumberId 对应账号表水电工 id
 * @param {number} painterId 对应账号表油漆工 id
 * @param {string} remark 备注/要求
 */
async function addHouseInfo(
{
  houseName,
  houseAddress,
  roomType,
  startTime,
  drawing,
  houseOwnerId,
  supervisionId,
  foremanId,
  bricklayerId,
  carpenterId,
  plumberId,
  painterId,
  remark
}) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    await createHouseInfo({
      houseName,
      houseAddress,
      roomType,
      startTime,
      drawing,
      houseOwnerId,
      supervisionId,
      foremanId,
      bricklayerId,
      carpenterId,
      plumberId,
      painterId,
      remark
    })
    return new ReturnResult(0, null, true, '添加成功')
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, '添加失败，请重试')
  }
}

/**
 * 修改房源信息
 * @param {number} id id
 * @param {string} houseName 业主名称
 * @param {string} houseAddress 房子地址
 * @param {string} roomType 房型
 * @param {string} startTime 开工时间
 * @param {string} drawing 图纸
 * @param {number} status 施工状态
 * @param {number} houseOwnerId 对应账号表业主 id
 * @param {number} supervisionId 对应账号表监理 id
 * @param {number} foremanId 对应账号表工长 id
 * @param {number} bricklayerId 对应账号表瓦工 id
 * @param {number} carpenterId 对应账号表木工 id
 * @param {number} plumberId 对应账号表水电工 id
 * @param {number} painterId 对应账号表油漆工 id
 * @param {string} remark 备注/要求
 */
async function updateHouseInfo(
{
  id,
  houseName,
  houseAddress,
  roomType,
  startTime,
  drawing,
  status,
  houseOwnerId,
  supervisionId,
  foremanId,
  bricklayerId,
  carpenterId,
  plumberId,
  painterId,
  remark
}) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    await updateHouseInfoById({
      id,
      houseName,
      houseAddress,
      roomType,
      startTime,
      drawing,
      status,
      houseOwnerId,
      supervisionId,
      foremanId,
      bricklayerId,
      carpenterId,
      plumberId,
      painterId,
      remark
    })
    return new ReturnResult(0, null, true, '添加成功')
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, '添加失败，请重试')
  }
}

/**
 * 删除房源信息
 * @param {number} id id
 */
async function deleteHouseInfo(id) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    await deleteHouseInfoById(id)
    return new ReturnResult(0, null, true, "删除成功")
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, "删除失败，请重试")
  }
}

module.exports = {
  addHouseInfo,
  updateHouseInfo,
  getHouseInfos,
  deleteHouseInfo
}
